#include <REGX52.H>
#include <INTRINS.h>
#include "LCD1602.h"
#include "DS1302.h"
#include "Key.h"
#include "Timer0.h"

unsigned char KeyNum,MODE,TimeSetSelect,TimeSetFlashFlag;

void TimeShow(void)
{   
      DS1302_ReadTime();
      LCD_ShowNum(1,7,DS1302_Time[0],2);
			LCD_ShowNum(1,10,DS1302_Time[1],2);
			LCD_ShowNum(1,13,DS1302_Time[2],2);
			LCD_ShowNum(2,7,DS1302_Time[3],2);
			LCD_ShowNum(2,10,DS1302_Time[4],2);
			LCD_ShowNum(2,13,DS1302_Time[5],2);

}

void TimeSet(void)
{
  if(KeyNum==2)
	 {
	  TimeSetSelect++;
		TimeSetSelect%=6;//判断越界 超过5清零 一共6个
	 }
  if(KeyNum==3)//选中的数加1
   {
	  DS1302_Time[TimeSetSelect]++;
		 if(DS1302_Time[0]>99){DS1302_Time[0]=0;}
		 if(DS1302_Time[1]>12){DS1302_Time[1]=1;}
		 
		 if(DS1302_Time[1]==1||DS1302_Time[1]==3||DS1302_Time[1]==5||
			  DS1302_Time[1]==7||DS1302_Time[1]==8||DS1302_Time[1]==10||DS1302_Time[1]==12)
		    {
				 if(DS1302_Time[2]>31){DS1302_Time[2]=1;}
        }
				else if (DS1302_Time[1]==4||DS1302_Time[1]==6||DS1302_Time[1]==9
				         ||DS1302_Time[1]==11)
                 {
                    if(DS1302_Time[2]>30){DS1302_Time[2]=1;}
								 }
			        	else if(DS1302_Time[1]==2)
				         {
									 if(DS1302_Time[0]%4==0)
								{
									if(DS1302_Time[2]>29){DS1302_Time[2]=1;}
								}
								else 
									{
								   if(DS1302_Time[2]>28){DS1302_Time[2]=1;}
								  }
				      } 
								 
		 if(DS1302_Time[3]>23){DS1302_Time[3]=0;}
		 if(DS1302_Time[4]>59){DS1302_Time[4]=0;}
		 if(DS1302_Time[5]>59){DS1302_Time[5]=0;}
		 
	 }		
	if(KeyNum==4)//选中的数减1
	 {
	  DS1302_Time[TimeSetSelect]--;
		 if(DS1302_Time[0]<0){DS1302_Time[0]=99;}
		 if(DS1302_Time[1]<1){DS1302_Time[1]=12;}
		 
		 if(DS1302_Time[1]==1||DS1302_Time[1]==3||DS1302_Time[1]==5||
			  DS1302_Time[1]==7||DS1302_Time[1]==8||DS1302_Time[1]==10||DS1302_Time[1]==12)
		    {
				 if(DS1302_Time[2]<1){DS1302_Time[2]=31;}
				 if(DS1302_Time[2]>31){DS1302_Time[2]=1;}
        }
				else if (DS1302_Time[1]==4||DS1302_Time[1]==6||DS1302_Time[1]==9
				         ||DS1302_Time[1]==11)
                 {
                    if(DS1302_Time[2]<1){DS1302_Time[2]=30;}
										if(DS1302_Time[2]>30){DS1302_Time[2]=1;}
								 }
			        	else if(DS1302_Time[1]==2)
				         {
									 if(DS1302_Time[0]%4==0)
								{
									if(DS1302_Time[2]<1){DS1302_Time[2]=29;}
									if(DS1302_Time[2]>29){DS1302_Time[2]=1;}
								}
								else 
									{
								   if(DS1302_Time[2]<1){DS1302_Time[2]=28;}
									 if(DS1302_Time[2]>28){DS1302_Time[2]=1;}
								  }
				      } 
								 
		 if(DS1302_Time[3]<0){DS1302_Time[3]=23;}
		 if(DS1302_Time[4]<0){DS1302_Time[4]=59;}
		 if(DS1302_Time[5]<0){DS1302_Time[5]=59;} 
	 }
	 //更新
	 //如果选中 并且标志位为1就熄灭
	 if(TimeSetSelect ==0&&TimeSetFlashFlag==1){LCD_ShowString(1,7,"  ");}
	 else{LCD_ShowNum(1,7,DS1302_Time[0],2);}
	  if(TimeSetSelect ==1&&TimeSetFlashFlag==1){LCD_ShowString(1,10,"  ");}
	 else{LCD_ShowNum(1,10,DS1302_Time[1],2);}
	  if(TimeSetSelect ==2&&TimeSetFlashFlag==1){LCD_ShowString(1,13,"  ");}
	 else{LCD_ShowNum(1,13,DS1302_Time[2],2);}
	  if(TimeSetSelect ==3&&TimeSetFlashFlag==1){LCD_ShowString(2,7,"  ");}
	 else{LCD_ShowNum(2,7,DS1302_Time[3],2);}
	  if(TimeSetSelect ==4&&TimeSetFlashFlag==1){LCD_ShowString(2,10,"  ");}
	 else{LCD_ShowNum(2,10,DS1302_Time[4],2);}
	  if(TimeSetSelect ==5&&TimeSetFlashFlag==1){LCD_ShowString(2,13,"  ");}
	 else{LCD_ShowNum(2,13,DS1302_Time[5],2);}
	
	 
	 
}

void main()
{
	
	 LCD_Init();
	 DS1302_Init();
   Timer0Init();
	 LCD_ShowString(1,2,"DATA");
	 LCD_ShowString(2,2,"TIME");
	 LCD_ShowString(1,9,"-  -");
	 LCD_ShowString(2,9,":  :");  
	 DS1302_SetTime();

		while(1)
		{
			KeyNum = Key();
			if(KeyNum==1)
      {
				if(MODE==0){MODE=1;}//这里MODE定义了默认为0 也就是先执行TimeShow
			else if(MODE==1){MODE=0;DS1302_SetTime();}//然后交替执行TimeSet
			}
		  switch(MODE)
			{
				case 0:TimeShow();break;
        case 1:TimeSet();break;				
			}
		}
}

void Timer0_Routine() interrupt 1
		{
			static unsigned int T0Count;
			TL0 = 0x18;		  
			TH0 = 0xFC;
			T0Count++;
			if(T0Count>=500)
			{
				T0Count=0;
				TimeSetFlashFlag = !TimeSetFlashFlag;
		
			}
		}